/*
 * Copyright 2014 Christian Hildebrandt
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 *
 * @author Men@Work
 */
public interface TODOS {

    // Die Anwendung soll als JEE Application auf einem JBOSS EAP6 entwickelt
    // werden und auch laufen. Für Security Features soll das Apache Framework
    // Shiro eingesetzt werden. Als Persistenzschicht wird JPA 2 und als
    // Frontendschicht für die Webseite JSF 2 angesetzt. Für eine spätere
    // Entwicklung der mobile App auf dem Android System arbeitet Shiro gut mit
    // RESTful Services zusammen, welche zum einen durch Shiro eigene
    // Authentifizierung abgesichert werden und zum anderen ideal in die
    // Anwendungsanfprderungen passen, da lediglich mit Ressourcesoperationen
    // CRUD gearbeitet wird. Als erste Enwicklungsstufe soll sie Anwendung vom
    // Backend bis zum Frontend folgende Anforderungen erfüllen können.

    // 1. Verwalten von Benutzern
    // 2. Verwalten von Projekten
    // 3. Verwalten von Zeiterfassungen
    // 4. Verwalten von allgemeinen Anwendungseinstellungen

    // Das Projekt ist als Maven Projekt angelegt und wird (momentan noch) auf
    // https://code.google.com/p/timera gehostet. Für die gesamte Zeit der
    // Entwicklungs- und Testphase bleibt der Code auf code.google.com da wir
    // hier auch einen Issue Tracker sowie ein Wiki zur Verfügung haben.

    // Einrichtung:
    // Download and install Eclipse Luna from Wiki
    // Download and install JBOSS EAP 6.3 from Wiki
    // Download and install PostGreSQL Database from Wiki
    // Create PostgreSQL Database TimeraDB (Credentials get from other
    // Developers)
    // Create Datasource in JBOSS EAP 6.3
    // Add the following Lines to your standalone.xml below <subsystem
    // xmlns="urn:jboss:domain:datasources:1.2">

    // <datasource jta="false" jndi-name="java:jboss/datasources/timeraDS"
    // pool-name="TimeraDB" enabled="true" use-ccm="false">
    // <connection-url>jdbc:postgresql://localhost:5432/timeraDB</connection-url>
    // <driver-class>org.postgresql.Driver</driver-class>
    // <driver>postgresql-9.3-1102.jdbc4.jar</driver>
    // <security>
    // <user-name>application</user-name>
    // <password>timera</password>
    // </security>
    // <validation>
    // <validate-on-match>false</validate-on-match>
    // <background-validation>false</background-validation>
    // </validation>
    // <timeout>
    // <set-tx-query-timeout>false</set-tx-query-timeout>
    // <blocking-timeout-millis>0</blocking-timeout-millis>
    // <idle-timeout-minutes>0</idle-timeout-minutes>
    // <query-timeout>0</query-timeout>
    // <use-try-lock>0</use-try-lock>
    // <allocation-retry>0</allocation-retry>
    // <allocation-retry-wait-millis>0</allocation-retry-wait-millis>
    // </timeout>
    // <statement>
    // <share-prepared-statements>false</share-prepared-statements>
    // </statement>
    // </datasource>

    // Add jdbc Driver (postgresql-9.3-1102.jdbc4.jar) to Deployments of Jboss

    // Start Developing ;)

    // DATABASE
    // @NotNull etc Annotations for entities
    // create some triggers/procedures for 'ON INSERT' into Timesheet to
    // calculate the users actual monthly hours/vacation days etc.
    // Container managed Entitymanager ->
    // NamedQueries in Entities --------> Delete literal.Constants.java
    // JTA managed transactions

    // WEB
    // Hide URL after Application Context (Prettyfaces)
    // Tag Library (in progress)
    // General validation error focus guide based on js (partially done)

    // LOGIN
    // - Login with Credentials from DB (Done)
    // - Encrypt Password
    // - Error Messages redirect to messages
    // - Remember me Function
    // - Forgot Password Function
    // - Nice To Have - SessionExpired LockScreen

    // HEADER
    // - Logo link to Dashboard (done)
    // - Breadcrumb Implementation with JSF
    // - Profil rechts
    // - Username links (Done)
    // - Logout (Done)
    // - Implement Widgets (Messages, Notifications, Tasks)

    // NAVIGATION
    // - Links zu Seiten Rechteabhängig (in progress)
    // - Prevent loading full page, only content to prevent destroying
    // javascript treeview active set

    // CONTENT VIEW
    // - Make headlines not lowercase

    // TIMESHEETS
    // - Form to add new timesheets
    // - Editable Datatable with all timesheets
    // - Admin View with selectable user, editable timesheet table, Report
    // Function, PDF Export

    // VERWALTUNG

    // Benutzerverwaltung
    // - Form to add new users (in progress)
    // - Editable Datatable with all users (done)

    // Projektverwaltung
    // - Form to add new projects
    // - Editable Datatable with all projects

    // - Kalender mit Feiertagen

    // ALLGEMEIN

    // - Input Fields with onblur validation like this (Input with
    // success/error)
    // <div class="form-group has-success">
    // <label class="control-label" for="inputSuccess"><i
    // class="fa fa-check"></i> Input with success</label>
    // <input type="text" class="form-control" id="inputSuccess"
    // placeholder="Enter ...">
    // </div>

    // - CSRF Protection

    // CSS
    // - layout h:commandbutton with icon in css file like this
    // input .fa-input.fa-some-icon > li:before { content: '>\f044'; }
    // to achieve
    // <h:commandbutton type="button" styleClass="btn btn-danger fa-input"
    // value="&#xf014;" />
    // be rendered to
    // <input type="button" name="some_strange_jsf_defined_name"
    // value="the_symbol_you_have_selected" class="btn btn-warning fa-input">

}
